#ifndef CDDS_FASTDDS_H
#define CDDS_FASTDDS_H

#include "cdds.h"

#include <fastdds/dds/domain/DomainParticipantFactory.hpp>
#include <fastdds/dds/domain/DomainParticipant.hpp>
#include <fastdds/dds/topic/TypeSupport.hpp>
#include <fastdds/dds/publisher/Publisher.hpp>
#include <fastdds/dds/publisher/DataWriter.hpp>
#include <fastdds/dds/publisher/DataWriterListener.hpp>

using namespace eprosima::fastdds::dds;


// factory
struct FastDDS_DomainParticipantFactory {
	DOMAIN_PARTICIPANT_FACTORY_FIELDS();
	DomainParticipantFactory* factory;
};


FastDDS_DomainParticipantFactory* FastDDS_get_instance();

// participant
struct FastDDS_DomainParticipant
{
	DOMAIN_PARTICIPANT_FIELDS();
	DomainParticipant* participant;
};


CDomainParticipant* FastDDS_create_participant(CDomainParticipantFactory* factory);
void FastDDS_delete_participant(CDomainParticipantFactory* self, CDomainParticipant* component);
CPublisher* FastDDS_create_publisher(CDomainParticipant* participant, CQosPolicy* qos_list, CPublisherListener* a_listener, CStatusKind* mask);

// publisher
struct FastDDS_Publisher
{
};

#endif // CDDS_FASTDDS_H